<?php
// src/Pyaf/GymBundle/Controller/AsistenciaController.php
namespace Pyaf\GymBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

use Pyaf\GymBundle\Entity\Clase;
use Pyaf\GymBundle\Entity\Rutina;
use Pyaf\GymBundle\Entity\Asistencia;

/**
 * Description of AsistenciaController
 *
 * @author Toshiba P755-S5272
 */
class AsistenciaController extends Controller{
    
    public function listAction() {
        return $this->render('PyafGymBundle:Asistencia:list.html.twig');
    }
    
    public function showAction() {
        return $this->render('PyafGymBundle:Asistencia:show.html.twig');
    }
    
    public function showCalendarAction() {
        date_default_timezone_set('America/Argentina/Buenos_Aires');
        $currentDate = date("Y-m-d");
//        $currentDate = date("Y-m-17"); //de prueba
        $currentDay  = date("l");
        $dia = $this->dayToDia($currentDay);
//        $dia = 'Lunes'; //de prueba
        
        $clases = new Clase();
        $rutina = new Rutina();
        
        $em = $this->getDoctrine()->getEntityManager();
        
        $clases = $em->getRepository('PyafGymBundle:Clase')->findAllOrderByDia($dia);
        $id_rutina = $em->getRepository('PyafGymBundle:Calendario')->findRutinaByCurrentDate("$currentDate 00:00:00");
        if(!empty($id_rutina)){
            $rutina = $em->getRepository('PyafGymBundle:Rutina')->findRutina($id_rutina->getIdRutina());
            $jsonData = json_encode($this->generateJsonDataToAsistencia($clases, $rutina));
            $response = new Response($jsonData);
            return $response;
        } else {
            $calendarioJson = array(
                array(
                    'id' => 0,
                    'title' => "Día no habil o el día no tiene rutina asignada",
                    'start' => date("Y-m-d 00:00:00"),
                    'end' => date("Y-m-d 23:59:59"),
                    'allDay' => true,
                )
            );
            
            $jsonData = json_encode($calendarioJson);
            $response = new Response($jsonData);
            return $response;
        }
    }
    
    public function formAddAction() {
        date_default_timezone_set('America/Argentina/Buenos_Aires');
        $peticion = $this->getRequest();
        $em = $this->getDoctrine()->getEntityManager();
        
        $idClase = $peticion->request->get('idClase');
        $idRutina = $peticion->request->get('idRutina');
        $fechaHoraClase = date('Y-m-d H:i:s', $peticion->request->get('fechaHoraClase'));
        
        $codigoClase = $idClase."-".date('dmy', $peticion->request->get('fechaHoraClase'));
        $exist = $em->getRepository('PyafGymBundle:Asistencia')->findBy(array('codigoClase' => $codigoClase));
        
        $clase = new Clase();
        $clase = $em->getRepository('PyafGymBundle:Clase')->findById($idClase);
        $profesores = $em->getRepository('PyafGymBundle:Profesor')->findAllOrderByNombre();
        $rutina = $em->getRepository('PyafGymBundle:Rutina')->findRutina($idRutina);

        if(!empty($exist)){
            
             return $this->render('PyafGymBundle:Asistencia:asistenciaRegistrada.html.twig', array(
                                'clase' => $clase,
                                'rutina' => $rutina,
                                'fechaHoraClase' => $fechaHoraClase,
                                'codigoClase' => $codigoClase
                     ));
        } else {

            $alumnosAvisaron = $em->getRepository('PyafGymBundle:AvisoFalta')
                                  ->findAllAlumnosAvisaronClaseFecha($fechaHoraClase);

            $alumnos = $clase->getAlumnos();
            foreach ($alumnos as $key => $alumno) {
                foreach ($alumnosAvisaron as $alumnoAviso) {
                    if($alumno->getId() == $alumnoAviso->getAlumno()->getId()){
                        $alumnos->remove($key);
                    }
                }
            }

            $alumnosRecuperan = $em->getRepository('PyafGymBundle:AvisoFalta')
                                   ->findAllAlumnosRecuperanClaseFecha($fechaHoraClase);

            return $this->render('PyafGymBundle:Asistencia:formAddAsistencia.html.twig', array(
                                'clase' => $clase,
                                'profesores' => $profesores,
                                'rutina' => $rutina,
                                'alumnos' => $alumnos,
                                'alumnosAvisaron' => $alumnosAvisaron,
                                'alumnosRecuperan' => $alumnosRecuperan,
                                'fechaHoraClase' => $fechaHoraClase
            ));
        }
    }
    
    public function addAction() {
        
        $em = $this->getDoctrine()->getEntityManager();
        $peticion = $this->getRequest();
        
        try {
            $clase = $em->getRepository('PyafGymBundle:Clase')->findById($peticion->request->get('id_Clase'));
            $profesor = $em->getRepository('PyafGymBundle:Profesor')->findProfesor($peticion->request->get('id_Profesor'));
            $rutina = $em->getRepository('PyafGymBundle:Rutina')->findRutina($peticion->request->get('id_Rutina')); 
            
            $codigoClase = $peticion->request->get('codigoClase');

            $id_Alumnos = $peticion->request->get('id_Alumnos');
            $id_AlumnosAvisa = $peticion->request->get('id_AlumnosAvisa');
            $id_AlumnosRecupera = $peticion->request->get('id_AlumnosRecupera');

            if(!empty($id_Alumnos)){
                foreach ($id_Alumnos as $value) {
                    $asistencia = new Asistencia();
                    $asistencia->setClase($clase);
                    $asistencia->setCodigoClase($codigoClase);
                    $asistencia->setProfesor($profesor);
                    $asistencia->setRutina($rutina);
                    $asistencia->setFechaClase($peticion->request->get('fechaHoraClase'));
                    $asistencia->setComentarios($peticion->request->get('comentario'));
                    $alumno = $em->getRepository('PyafGymBundle:Alumno')->findAlumno($value);

                    $asistencia->setAlumno($alumno);
                    $asistencia->setEstadoAsistencia('Normal');
                    $asistencia->setAsistencia($peticion->request->get('radioAlumno-'.$value));

                    $em->persist($asistencia);
                    $em->flush();
                }
            }
            if(!empty($id_AlumnosAvisa)){
                foreach ($id_AlumnosAvisa as $value) {
                    $asistencia = new Asistencia();
                    $asistencia->setClase($clase);
                    $asistencia->setCodigoClase($codigoClase);
                    $asistencia->setProfesor($profesor);
                    $asistencia->setRutina($rutina);
                    $asistencia->setFechaClase($peticion->request->get('fechaHoraClase'));
                    $asistencia->setComentarios($peticion->request->get('comentario'));
                    $alumno = $em->getRepository('PyafGymBundle:Alumno')->findAlumno($value);

                    $asistencia->setAlumno($alumno);
                    $asistencia->setEstadoAsistencia('Avisó Falta');
                    $asistencia->setAsistencia('A');

                    $em->persist($asistencia);
                    $em->flush();
                }
            }
            if(!empty($id_AlumnosRecupera)){
                foreach ($id_AlumnosRecupera as $value) {
                    $asistencia = new Asistencia();
                    $asistencia->setClase($clase);
                    $asistencia->setCodigoClase($codigoClase);
                    $asistencia->setProfesor($profesor);
                    $asistencia->setRutina($rutina);
                    $asistencia->setFechaClase($peticion->request->get('fechaHoraClase'));
                    $asistencia->setComentarios($peticion->request->get('comentario'));
                    $alumno = $em->getRepository('PyafGymBundle:Alumno')->findAlumno($value);

                    $asistencia->setAlumno($alumno);
                    $asistencia->setEstadoAsistencia('Recuperó');
                    $asistencia->setAsistencia($peticion->request->get('radioAlumnoRecupera-'.$value));

                    $em->persist($asistencia);
                    $em->flush();
                }
            }
            $this->get('session')
                 ->setFlash(
                               'alertaAsistenciaSuccess',
                               'La asistencia ha sido registrada satisfactoriamente!'
                           );
            return $this->render('PyafGymBundle:Asistencia:list.html.twig');
            
        } catch (Exception $exc) {
            $this->get('session')
                 ->setFlash(
                               'alertaAsistenciaError',
                               'Error, ha ocurrido un problema al guardar la asistencia, intente nuevamente!'
                           );
            return $this->render('PyafGymBundle:Asistencia:list.html.twig');
        }

    }
    
    public function asistenciaAction() {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = $em->getRepository('PyafGymBundle:Alumno')->findAll();
        
        return $this->render('PyafGymBundle:Asistencia:asistencia.html.twig',
                array('alumnos' => $alumnos));
    }
    
    public function asistenciaShowAction($id) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumno = $em->getRepository('PyafGymBundle:Alumno')->find($id);
        $asistenciaList = $em->getRepository('PyafGymBundle:Asistencia')->findAsistenciaByAlumno($id);
        
        return $this->render('PyafGymBundle:Asistencia:asistenciaShow.html.twig',
                array('asistenciaList' => $asistenciaList, 'alumno' => $alumno));
    }
    
    public function asistenciaListAction() {
        $em = $this->getDoctrine()->getEntityManager();
        $asistencias = $em->getRepository('PyafGymBundle:Asistencia')->findAll();
        
        return $this->render('PyafGymBundle:Asistencia:asistenciaList.html.twig',
                array('asistencias' => $asistencias));
    }
    
    public function editAction($id){
        $em = $this->getDoctrine()->getEntityManager();
        
        $alumnos = $em->getRepository('PyafGymBundle:Asistencia')
                        ->findBy(array('codigoClase'=>$id, 'estadoAsistencia'=>'Normal'));
        $profesores = $em->getRepository('PyafGymBundle:Profesor')->findAllOrderByNombre();
        $alumnosAvisa = $em->getRepository('PyafGymBundle:Asistencia')
                        ->findBy(array('codigoClase'=>$id, 'estadoAsistencia'=>'Avisó Falta'));
        $alumnosRecupera = $em->getRepository('PyafGymBundle:Asistencia')
                        ->findBy(array('codigoClase'=>$id, 'estadoAsistencia'=>'Recuperó'));
        $asistencia = $em->getRepository('PyafGymBundle:Asistencia')->findOneBy(array('codigoClase'=>$id)); 
        
        return $this->render('PyafGymBundle:Asistencia:asistenciaEdit.html.twig', array(
                                
                                'alumnos' => $alumnos,
                                'alumnosAvisaron' => $alumnosAvisa,
                                'alumnosRecuperan' => $alumnosRecupera,
                                'asistencia' => $asistencia,
                                'profesores' => $profesores
            ));
    }
    
    public function addEditAction() {
        $em = $this->getDoctrine()->getEntityManager();
        $peticion = $this->getRequest();
        
        try {
            $id_Alumnos = $peticion->request->get('id_Alumnos');
            $id_AlumnosAvisa = $peticion->request->get('id_AlumnosAvisa');
            $id_AlumnosRecupera = $peticion->request->get('id_AlumnosRecupera');
            $profesor = $em->getRepository('PyafGymBundle:Profesor')->find($peticion->request->get('id_Profesor'));
            
                      
            if(!empty($id_Alumnos)){
                foreach ($id_Alumnos as $value) {
                    $asistencia = $em->getRepository('PyafGymBundle:Asistencia')->find($value);
                    $asistencia->setComentarios($peticion->request->get('comentario'));
                    $asistencia->setAsistencia($peticion->request->get('radioAlumno-'.$value));
                    $asistencia->setProfesor($profesor);

                    $em->persist($asistencia);
                    $em->flush();
                }
            }
            if(!empty($id_AlumnosAvisa)){
                foreach ($id_AlumnosAvisa as $value) {
                    $asistencia = $em->getRepository('PyafGymBundle:Asistencia')->find($value);
                    $asistencia->setComentarios($peticion->request->get('comentario'));
                    $asistencia->setAsistencia('A');
                    $asistencia->setProfesor($profesor);

                    $em->persist($asistencia);
                    $em->flush();
                }
            }
            if(!empty($id_AlumnosRecupera)){
                foreach ($id_AlumnosRecupera as $value) {
                    $asistencia = $em->getRepository('PyafGymBundle:Asistencia')->find($value);
                    $asistencia->setComentarios($peticion->request->get('comentario'));
                    $asistencia->setAsistencia($peticion->request->get('radioAlumnoRecupera-'.$value));
                    $asistencia->setProfesor($profesor);

                    $em->persist($asistencia);
                    $em->flush();
                }
            }
            $this->get('session')
                 ->setFlash(
                               'alertaAsistenciaSuccess',
                               'La asistencia ha sido modificada satisfactoriamente!'
                           );
            return $this->render('PyafGymBundle:Asistencia:list.html.twig');
            
        } catch (Exception $exc) {
            $this->get('session')
                 ->setFlash(
                               'alertaAsistenciaError',
                               'Error, ha ocurrido un problema al guardar la asistencia, intente nuevamente!'
                           );
            return $this->render('PyafGymBundle:Asistencia:list.html.twig');
        }
    }
    /***************************************************************************
     * Funciones que no aportan a la vista
     **************************************************************************/
    public function dayToDia($day){
        $dias = array(
            'Lunes'=>'Monday', 'Martes'=>'Tuesday',
            'Miércoles'=>'Wednesday','Jueves'=>'Thursday',
            'Viernes'=>'Friday', 'Sábado'=>'Saturday', 'Domingo'=>'Sunday');
        
        foreach ($dias as $key => $dia) {
            if($dia == $day){
                return $key;
                exit();
            }
        }
        return null;
    }
    
    private function generateJsonDataToAsistencia($clases, $rutina){
        date_default_timezone_set('America/Argentina/Buenos_Aires');

        $currentDate = date('Y-m-d');
        $currentHour = date('H');
        $estadoClase = "-";
        $nombreRutina = $rutina->getNombre();
        
        $calendarioJson = array();
    
        foreach ($clases as $value) {
                        
            $url = $this->get('router')->generate('asistencia_asignar_formadd');
    
            $currentDay = $currentDate." ".$value->getHorario()->format('H:i:s');
            $Date = strtotime($currentDay);
            $hourStart = date("Y-m-d H:i:s",  strtotime('+0 hours', $Date));
            $hourEnd = date("Y-m-d H:i:s",  strtotime('+1 hours', $Date));
            $hour = date("H", $Date);
            
            if($hour == $currentHour){
                $estadoClase = "dictandose";
            } elseif ($hour < $currentHour) {
                $estadoClase = "finalizada";
            }
            
            $profesor = $value->getProfesor()->getNombreCompleto();
            
            $day = array(
                        'id' => $value->getId(),
			'title' => "Estado de la clase: $estadoClase.  Profesor: $profesor.  Rutina: $nombreRutina",
                        'rutina' => $rutina->getId(),
			'start' => $hourStart,
			'end' => $hourEnd,
                        'allDay' => false,
			'reservar' => $url
            );
            array_push($calendarioJson, $day);
        }
        
        return $calendarioJson;
    }
}

?>
